// ==UserScript==  
// @name         m.31xiaoshuo简化+下一章+按钮
// @namespace    http://tampermonkey.net/  
// @version      0.1  
// @description  当存在class=content时，简化网页仅显示class=content的内容和“下一章”按钮  ，到达底部自动获取下一章【虽然顶部含有其他元素，但朗读从content开始，成功】【三个参数，ifjianhua用于判断与目录页的不同；zhangjie用于替换内容；xiazhang是原网页的下章链接】
// @author       您的名字  
// @match        *://*.lakanshu.cc/read/* 
// @match        *://*.mayiwsk.com/*
// @match        *://*.31xiaoshuo.com/*/*/*
// @grant        none  
// @updateURL    https://gitee.com/bigona3/youhou_jb/raw/master/%5Ball%5Dm.13xiaoshuo_jianhua+xiazhang+button.js
// ==/UserScript==  
  
(function() {  
    'use strict';  
    var ifjianhua;//防止目录页被简化！！！
    var zhangjie;
	var xiazhang;

	zhangjie='.am-article.am-padding-sm';//class前加.，中间有空格用.代替
    //ifjianhua='.am-article-bd';//在目录页仍被检索到！！
    ifjianhua='.nr_page';//class前加.
	//xiazhang='next_url';
    // 检查是否存在class为content的元素  ——只是为了判断是否需要简化
    //const contentElement = document.querySelector('.content');//只在当前页简化，后续都不会简化，所以没必要  
	//const contentElement = document.querySelector('.container');//用.container，会在底部加全部；需要加.，否则当前页不会简化，下页开始；
    const contentElement = document.querySelector(zhangjie);//zhangjie，1次
    const judgeElement = document.querySelector(ifjianhua);


// 定义容器+按钮	
	var btncontainer=document.createElement('div');
	btncontainer.style.position = 'fixed';
    btncontainer.style.bottom = '0';
    btncontainer.style.left = '0';
    btncontainer.style.right = '0';// 确保容器宽度等于视窗宽度
    btncontainer.style.display = 'flex';
    btncontainer.style.justifyContent = 'center'; // 水平居中
    //btncontainer.style.padding = '10px 0'; // 上下内边距
    btncontainer.style.zIndex = '10000'; // 确保按钮在最上层
	
	const gotopbutton = document.createElement('button');
	gotopbutton.textContent = '【home】';
	gotopbutton.style.flex = '1'; // 等分容器宽度	const 
    gotopbutton.onclick = function() {  
        window.scrollTo(0, 0);  
    };  
    btncontainer.appendChild(gotopbutton);  

    const gobottombutton = document.createElement('button');  
    gobottombutton.textContent = '【end】'; 
	gobottombutton.style.flex = '1'; // 等分容器宽度	
    gobottombutton.onclick = function() {  
        window.scrollTo(0, document.body.scrollHeight);  
    };  
    btncontainer.appendChild(gobottombutton); 	
	
	const shanghuabutton = document.createElement('button');
	shanghuabutton.textContent = '上滑';
	shanghuabutton.style.flex = '1'; // 等分容器宽度	const 
    shanghuabutton.onclick = function() {  
        window.scrollBy(0, -300);  
    };  
    btncontainer.appendChild(shanghuabutton);  

    const xiahuabutton = document.createElement('button');  
    xiahuabutton.textContent = '下滑';  
	xiahuabutton.style.flex = '1'; // 等分容器宽度
    xiahuabutton.onclick = function() {  
        window.scrollBy(0, 300);  
    };  
    btncontainer.appendChild(xiahuabutton); 

	
    if (judgeElement) {  
        // 如果存在，则移除所有内容，只保留content元素和下一章按钮  
        // 注意：这里的实现方式可能需要根据页面的具体结构进行调整  
  
        // 创建一个新的div来放置我们想要保留的内容  
        const newContainer = document.createElement('div'); 
        //const titleelement=document.querySelector('div.am-article-hd.am-text-center > h3:first-child');
  
        // 将content元素添加到新容器中  
        //newContainer.appendChild(titleelement);
        newContainer.appendChild(contentElement);  
  
        // 查找并复制“下一章”按钮（如果存在）【如果是.container，没必要额外添加”下章“】  
        //const nextChapterLink = document.getElementById('next_url'); //成功
		//const nextChapterLink = document.getElementById(xiazhang);//xiazhang，1次 
        //const nextChapterLink = document.querySelector('div.am-btn-group.am-btn-group-justify.am-margin-vertical > a:last-child');
        //if (nextChapterLink) {  
        //    // 为了美观，可以创建一个新的div来包裹“下一章”按钮，并添加一些样式（如果需要）  
        //    const nextChapterContainer = document.createElement('div');  
        //    nextChapterContainer.style.marginTop = '20px'; // 或者其他适当的样式  
        //    nextChapterContainer.appendChild(nextChapterLink);  
        //    newContainer.appendChild(nextChapterContainer);  
        //}  
  
        // 清空body并添加新容器  
        document.body.innerHTML = ''; // 注意：这会移除所有事件监听器和动态加载的脚本  
        document.body.appendChild(newContainer);  
		document.body.appendChild(btncontainer);
        // 如果需要，可以在这里重新添加一些全局的样式或脚本  
    }  

//简化前
// body id="reader-m-fix"
	// div class=header
		// div class=container,id=container
		    // div class=reader-main
                // div class=content,id=conntent
                // div class="section-opt m-bottom-opt"
			        // a id=next_url    

// 假设简化后
// body id="reader-m-fix"
	// div
		// div class=content,id=conntent
		// div sytle=
			// a id=next_url
			
	
    // 获取容器元素  
    // const container = document.getElementById('container'); 
	//const container = document.querySelector('.container');//成功
	const container = document.querySelector(zhangjie);//zhangjie，2次 
	//const container = document.getElementById('reader-m-fix'); //不用必须是reader-m-fix，否则只简化，不自动下一章
  
    // 监听滚动事件  
    window.addEventListener('scroll', function() {  
        // 检查是否滚动到底部  
        if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 10) {  
            // 尝试获取下一章的链接 【是从当前简化后的页面获取？？？】 
            //const nextUrl = document.getElementById('next_url').href;//成功  
			//const nextUrl = document.getElementById(xiazhang).href;//xiazhang，2次
            const nextUrl = document.querySelector('div.am-btn-group.am-btn-group-justify.am-margin-vertical > a:last-child').href;
            //const nextUrl = document.querySelector('a.am-btn.am-btn-default').href;
            //console.log(nextUrl);//从当前简化后的页面获取下章链接成功；
        
  
            if (nextUrl) {  
                // 加载下一章节的内容  
                fetch(nextUrl)  //爬取下一章
                    .then(response => response.text())  
                    .then(html => {  
                        // 假设新的内容也包含在一个类似的id="container"的div中  
                        // 这里需要更复杂的DOM解析，这里只是简单示例  
                        const parser = new DOMParser();  
                        const doc = parser.parseFromString(html, 'text/html');  
                        //console.log(doc);//爬取下章整个网页成功
                        //const newContainer = doc.querySelector('#container'); //成功
						//const newContainer = doc.querySelector('.am-article-bd');//此为正文
                        //console.log(newContainer);//
						const newContainer = doc.querySelector(zhangjie);//zhangjie，3次
                        //const newContainer = doc.querySelector(ifjianhua);
                        
  
                        if (newContainer) {  
                            // 替换当前内容  
                            container.innerHTML = newContainer.innerHTML;  //这里的container就是reader-m-fix
							document.body.appendChild(btncontainer);
//需要等对等替换？ Error fetching next chapter: TypeError: Cannot set properties of null (setting 'innerHTML')
                            // 滚动回页面顶部  
                            window.scrollTo(0, 0);  
					
                            // 可能需要更新一些链接或事件监听器  
                        }  
                    })  
                    .catch(error => console.error('Error fetching next chapter:', error));  
            }  
        }  
    });  	
  
    // 如果不存在class为content的元素，则不执行任何操作  
})();